Computer systems need a way to store and retrieve data from a variety of data devices, such as disk drives, printers, display screens, and scanners. In the past, each computer typically had its own directly attached devices, which no other computer was capable of using. But, this was a cumbersome and expensive design because sharing data among computers was difficult and a particular device might stay idle and unused for lengthy periods. For example, a retail store might have multiple cash registers, and each cash register storing its own price/product data locally is less efficient and more cumbersome than every cash register accessing the same price/product data on one common disk drive. Also, a printer is a device that a computer user might need for only short periods, so each computer attaching its own local printer is more expensive than multiple computers sharing one printer.
In order to overcome the aforementioned cumbersome and expensive solutions, computers were connected in networks, and one computer was allowed to store and retrieve data from another computer's data devices. But, accessing data devices on another computer created the problem of how to know what devices this other computer had available. Previous systems required the user to manually determine the identifiers (names) of the available devices attached to other computers on the network and enter these identifiers into the user's own computer. This manual process is inefficient, error prone, and annoying for the user. What is needed is a solution that allows a computer to automatically determine the identifiers of devices attached to remote computers.